package utils.reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

import utils.arrays.ArraysUtils;
import utils.bean.ObjectUtils;

/**
 * 方法处理类
 * @author Administrator
 *
 */
public class MethodUtils {
	private MethodUtils(){}
	
	/**
	 * 根据方法名取得方法组数
	 * @param methodName
	 * @param clz
	 * @return
	 */
	public static Method[] getMethod(String methodName,Class<?> clz){
		Method[] methods = clz.getMethods();
		if (ObjectUtils.hasNotLength(methods)) {
			return null;
		}
		Method[] ms = new Method[0];
		for (Method method : methods) {
			String targetMethodName = method.getName();
			if (targetMethodName.equals(methodName)) {
				ms = ArraysUtils.append(ms, method);
			}
		}
		return ms;
	}
	
	/**
	 * 根据构造器的参数个数取得构造函数
	 * @param clz
	 * @param paramsNum
	 * @return
	 */
	public static Constructor<?>[] getConstructor(Class<?> clz,int paramsNum){
		Constructor<?>[] constructors = clz.getConstructors();
		if (ObjectUtils.hasNotLength(constructors)) {
			return null;
		}
		Constructor<?>[] cons = new Constructor<?>[0];
		for (Constructor<?> con : constructors) {
			Class<?>[] params = con.getParameterTypes();
			if (params.length == paramsNum) {
				cons = ArraysUtils.append(cons, con);
			}
		}
		return cons;
	}
	
	
}
